﻿using System;
using System.Collections.Generic;
using Resn.WhuPub.DML;

namespace Resn.WhuPub.BIL
{
        /// <summary>
        ///定义联系人的属性和方法
        /// </summary>
        public interface IContact : IEntity
        {
                #region 属性

                #region 基本属性

                /// <summary>
                ///获取联系人所属院\系\处\所\公司部门Id
                /// </summary>
                /// <value>
                ///联系人所属院\系\处\所\公司部门Id
                /// </value>
                String DepartmentId { get; }

                /// <summary>
                ///获取或设置联系人姓名
                /// </summary>
                /// <value>
                ///联系人姓名
                /// </value>
                string Name { get; set; }

                /// <summary>
                ///获取或设置联系人职称
                /// </summary>
                /// <value>
                ///联系人职称，多个职称以分号隔开
                /// </value>
                string Title { get; set; }

                /// <summary>
                ///获取或设置联系人职务
                /// </summary>
                /// <value>
                ///联系人职务，多个职务已分号隔开
                /// </value>
                string Duty { get; set; }

                /// <summary>
                ///获取或设置联系人电话
                /// </summary>
                /// <value>
                ///联系人电话，多个电话以分号隔开
                /// </value>
                string Telephone { get; set; }

                /// <summary>
                ///获取或设置联系人QQ
                /// </summary>
                /// <value>
                ///联系人QQ，多个QQ以分号隔开
                /// </value>
                string QQ { get; set; }

                /// <summary>
                ///获取或设置联系人电子邮箱
                /// </summary>
                /// <value>
                ///联系人电子邮箱，多个电子邮箱以分号隔开
                /// </value>
                string Email { get; set; }

                /// <summary>
                ///获取或设置联系人是否为本社作者
                /// </summary>
                /// <value>
                ///联系人为本社作者时为True,否则为False
                /// </value>
                bool IsOwnAuthor { get; set; }

                /// <summary>
                ///获取或设置联系人社会兼职
                /// </summary>
                /// <value>
                ///联系人社追兼职，多个兼职以分号隔开
                /// </value>
                string SoicalAppointments { get; set; }

                /// <summary>
                ///获取或设置备注
                /// </summary>
                /// <value>
                ///备注
                /// </value>
                string Memo { get; set; }

                #endregion 基本属性

                /// <summary>
                ///获取联系人模型
                /// </summary>
                /// <value>
                ///联系人模型
                /// </value>
                ContactModel Model { get; }

                /// <summary>
                ///获取联系人所属的学校/公司
                /// </summary>
                /// <value>
                ///联系人所属的学校/公司
                /// </value>
                ICorporate Corporate { get; }

                /// <summary>
                ///获取联系人所属的分校校/分公司
                /// </summary>
                /// <value>
                ///联系人所属的分校/分公司
                /// </value>
                ICorporateBranch CorporateBranch { get; }

                /// <summary>
                ///获取联系人所属的部门
                /// </summary>
                /// <value>
                ///联系人所属的部门
                /// </value>
                IDepartment Department { get; }

                /// <summary>
                ///获取学历
                /// </summary>
                /// <value>
                ///学历项集合
                /// </value>
                List<IEducational> Educationals { get; }

                /// <summary>
                ///获取联系人是否为一名教师
                /// </summary>
                /// <value>
                ///True：是教师
                ///False：不是教师
                /// </value>
                bool IsTeacher { get; }

                /// <summary>
                ///获取联系人的书籍集合
                /// </summary>
                /// <value>
                ///联系人的书籍集合
                /// </value>
                List<IBook> Books { get; }

                /// <summary>
                ///获取联系人的反馈集合
                /// </summary>
                /// <value>
                ///联系人的反馈集合
                /// </value>
                List<IFeedback> Feedbacks { get; }

                #endregion 属性

                #region 方法

                /// <summary>
                ///创建学历
                /// </summary>
                /// <param name="graduateSchool">毕业院校</param>
                /// <param name="educationalLevel">学历层次</param>
                /// <param name="majorId">专业标识</param>
                /// <param name="startTime">入学时间</param>
                /// <param name="endTime">毕业时间</param>
                /// <returns>
                ///创建的学历对象
                /// </returns>
                IEducational CreateEducational(string graduateSchool, EducationalLevel educationalLevel,
                                                             string majorId, DateTime startTime, DateTime endTime);

                
                /// <summary>
                /// 创建书籍
                /// </summary>
                /// <param name="name">名称</param>
                /// <param name="partakeType">编写方式</param>
                /// <param name="publisher">出版社</param>
                /// <returns>
                /// 创建的反馈对象
                /// </returns>
                IBook CreateBook(string name, PartakeType partakeType, string publisher);

                


                /// <summary>
                ///创建反馈
                /// </summary>
                /// <param name="feedbackType">反馈类型</param>
                /// <param name="feedbackContent">反馈内容</param>
                /// <param name="enteringEmployeeId">录入员工标识</param>
                /// <param name="approveEmployeeId">审批员工标识</param>
                /// <returns>创建的反馈对象</returns>
                IFeedback CreateFeedback(FeedbackType feedbackType, string feedbackContent,
                                                       string enteringEmployeeId, string approveEmployeeId);

               
                /// <summary>
                ///创建样书寄送流程
                /// </summary>
                /// <param name="bookId">样书标识</param>
                /// <param name="count">数量</param>
                /// <param name="deliveryNumber">寄送单号</param>
                /// <param name="deliveryTime">寄送时间</param>
                /// <returns>创建的样书寄送流程对象</returns>
                IBookDelivery CreateBookDelivery(string bookId, int count,
                                                       string deliveryNumber, DateTime deliveryTime);

                
                

                #endregion
        }
}